package com.cskaoyan.javase.oop2._1extends._3protected._3clone;

/**
 * @description: Object类中clone方法
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * Object类是java继承体系中的顶层父类,java中的每一个类和数组都继承了Object
 * 所有类都是Object类的子类,都继承了Object类的成员
 *
 * Object类中有一个protected修饰的clone方法,那么:
 *      1.如果想要去调用A的clone方法,必须怎么调用?
 *          分析: A是Object类的子类,其中继承过来的clone方法是protected权限修饰的
 *              显然A和Object不可能是同包的关系,只能是不同包的关系
 *              在不同包下,必须在子类中创建子类自身对象,才能够访问从父类中继承过来protected成员
 *          必须在类A中去创建A的对象才能访问它的clone方法
 *      2.如果想要去调用Demo对象的clone方法,该怎么办?
 *          必须在Demo类的方法中,创建自身对象,然后调用方法
 *
 *
 */
public class Demo {
    public static void main(String[] args) throws CloneNotSupportedException {
        //调用A的clone方法
        A a = new A();
        //'clone()' has protected access in 'java.lang.Object'
        //没有访问权限
        //a.clone();

        Demo d = new Demo();
        d.clone();
    }

    public void test() throws CloneNotSupportedException {
        this.clone();
    }
}

class A {
    //关于异常,等到异常课程的时候学习,这里大家直接alt+回车修正代码即可
    public static void test() throws CloneNotSupportedException {
        A a = new A();
        a.clone();
    }

    /*@Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }*/
}
